﻿namespace OJS.Worker
{
    /// <summary>
    /// Đại diện cho kết quả sau khi chạy binary
    /// </summary>
    public class RunResult
    {
        /// <summary>
        /// Run success or not
        /// </summary>
        public bool Success { get; set; }

        /// <summary>
        /// Output if run success
        /// </summary>
        public string Output { get; set; }

        /// <summary>
        /// Memory used if run success
        /// </summary>
        public double? UsedMemory { get; set; }

        /// <summary>
        /// Total time comsume to run test
        /// </summary>
        public double? ProcessTime { get; set; }

        /// <summary>
        /// Error type
        /// </summary>
        public string ErrorType { get; set; }

        /// <summary>
        /// Tạo thể hiện của lớp FOJS.Worker.ExecuteResult
        /// </summary>
        /// <param name="isSuccess">Biến Bool chỉ định quá trình chạy thành công hay thất bại (Runtime error)</param>
        /// <param name="output">Biến String chứa kết quả sau khi chạy file thực thi.
        /// Giá trị null nếu chương trình chạy thất bại hoặc vượt quá thời gian, bộ nhớ cho phép</param>
        /// <param name="usedMemory">Bộ nhớ tối đa cho phép khi chạy chương trình.</param>
        /// <param name="time">Thời gian tối đa cho phép khi chạy chương trình.</param>
        /// <param name="errorType">Lỗi gặp phải khi chạy chương trình. 
        /// Giá trị null nếu isSuccess = true. Giá trị là lỗi nếu isSuccess = false</param>
        public RunResult(bool success, string output = null, double? usedMemory = null, double? time = null, string errorType = null)
        {
            Success = success;
            Output = output;
            UsedMemory = usedMemory;
            ProcessTime = time;
            ErrorType = errorType;
        }
    }
}
